package com.niuma.service.user;

import com.niuma.dao.BaseDao;
import com.niuma.dao.user.UserDao;
import com.niuma.dao.user.UserDaoImpl;
import com.niuma.pojo.User;
import org.junit.Test;

import java.sql.Connection;
import java.sql.SQLException;

/**
 * @author 一颗蛋50斤
 */
public class UserServiceImpl implements UserService {

    // 业务层会代用 Dao 层，所以我们要引入 Dao 层

    private UserDao userDao;

    public UserServiceImpl() {
        userDao = new UserDaoImpl();
    }

    @Override
    public User login(String userCode, String password) {
        Connection connection = null;
        User user = null;

        try {
            connection = BaseDao.getConnection();
            // 通过业务层调用对应的具体的数据库操作
            user = userDao.getLoginUser(connection, userCode);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            BaseDao.closeResource(connection, null, null);
        }

        return user;
    }

    /**
     * 这个方法用来完成验证用户输入的旧密码和数据库中的密码是否相等
     * 如果两个密码是相等的则调用 Dao 层的修改密码操作进行密码的修改
     * 如果数据库中的密码和用户输入的旧密码不相等，那么就不会进行修改并向上层返回失败的消息
     * 如果密码修改成功向上层返回修改成功的消息反正则返回修改失败的消息
     * @param baseInPassword 数据库中的用户密码
     * @param oldPassword 前端接收到的用户输入的旧密码
     * @param newPassword 用户的新密码也就是前端输入的所要修改的密码
     * @param id 用户在数据库中所对应的 id
     * @return true or false
     */
    @Override
    public boolean updatePassword(String baseInPassword, String oldPassword, String newPassword, int id) {
        boolean flag = false;

        // 判断数据库中的密码是否和用户输入的旧密码相等
       boolean areTheyEqual = baseInPassword.equals(oldPassword);
       // 定义一个数据库连接对象
       Connection connection = null;

       // 如果数据库中的用户密码和用户输入的旧密码相等则执行密码修改操作
       if (areTheyEqual) {
           try {
               // 获取数据连接对象
               connection = BaseDao.getConnection();
               // 通过业务层调用 Dao 层的修改密码操作
               flag = userDao.updatePassword(connection, id, newPassword);
           } catch (SQLException throwables) {
               throwables.printStackTrace();
           } finally {
               BaseDao.closeResource(connection, null, null);
           }
       }

        return flag;
    }
}
